import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'


axios.defaults.headers.post['Content-Type'] = 'application/json';
axios.defaults.headers.get['Content-Type'] = 'application/json';


// axios.defaults.transformRequest = [function (data) {
//     let ret = ''
//     for (let it in data) {
// 		if(data[it] != null){
// 			ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
// 		}
//     }
// 	ret = ret.substr(0,ret.length - 1)
//     return ret
// }]
// create an axios instance
console.log("url地址" + process.env.VUE_APP_BASE_API)
const service = axios.create({
	baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
	// withCredentials: true, // send cookies when cross-domain requests
	timeout: 50000, // request timeout
	headers:  {'Content-Type': 'application/json'},
})


// request interceptor
service.interceptors.request.use(
	config => {
	// do something before request is sent

	if (store.getters.token) {
	// let each request carry token
	// ['X-Token'] is a custom headers key
	// please modify it according to the actual situation
	config.headers['X-Token'] = getToken()
}
return config
},
error => {
	// do something with request error
	console.log(error) // for debug
	return Promise.reject(error)
}
)

// response interceptor
service.interceptors.response.use(
	/**
	 * If you want to get http information such as headers or status
	 * Please return  response => response
	 */

	/**
	 * Determine the request status by custom code
	 * Here is just an example
	 * You can also judge the status by HTTP Status Code
	 */
	response => {
	const res = response.data
	res["params"] = response.config.data;

// if the custom code is not 20000, it is judged as an error.
if (res.code !== 20000) {
	Message({
		message: res.message || 'Error',
		type: 'error',
		duration: 5 * 1000
	})

	// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
	if (res.code === 401) {
		// to re-login
		MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
			confirmButtonText: 'Re-Login',
			cancelButtonText: 'Cancel',
			type: 'warning'
		}).then(() => {
			store.dispatch('user/resetToken').then(() => {
				location.reload()
			})
	})
	}
	return Promise.reject(new Error(res.message || 'Error'))
} else {
	return res
}
},
error => {
	console.log('err' + error) // for debug
	Message({
		message: error.message,
		type: 'error',
		duration: 5 * 1000
	})
	return Promise.reject(error)
}
)

export default service
